{$IFNDEF M_TOPTOOLBAR}
{$DEFINE M_TOPTOOLBAR}

//button flags
const
  TTBBF_DISABLED    = 1;
  TTBBF_VISIBLE     = 2;
  TTBBF_PUSHED      = 4;
  TTBBF_SHOWTOOLTIP = 8;
  TTBBF_DRAWBORDER  = 16; // draw border for bitmap,bitmap must be WxH 16x12
  TTBBF_ISSEPARATOR = 32;

//for internal launch buttons
  TTBBF_ISLBUTTON   = 64;

type
  PTTBButton = ^TTBButton;
  TTBButton = record
    cbSize        :integer;
    hbBitmapUp    :HBITMAP;
    hbBitmapDown  :HBITMAP;
    pszServiceUp  :PAnsiChar;
    pszServiceDown:PAnsiChar;
    dwFlags       :DWORD;
    lParamUp      :LPARAM;
    wParamUp      :WPARAM;
    lParamDown    :LPARAM;
    wParamDown    :WPARAM;
    name          :PAnsiChar;
  end;

  PTTBButtonV2 = ^TTBButtonV2;
  TTBButtonV2 = record
    cbSize        :integer;
    hbBitmapUp    :HBITMAP;
    hbBitmapDown  :HBITMAP;
    pszServiceUp  :PAnsiChar;
    pszServiceDown:PAnsiChar;
    dwFlags       :DWORD;
    lParamUp      :LPARAM;
    wParamUp      :WPARAM;
    lParamDown    :LPARAM;
    wParamDown    :WPARAM;
    name          :PAnsiChar;
    hIconUp       :HICON;
    hIconDn       :HICON;
    tooltipUp     :PAnsiChar;
    tooltipDn     :PAnsiChar;
  end;

const

//=== EVENTS ===
{
  toptoolbar/moduleloaded event
  wParam = lParam = 0
  Called when the toolbar services are available

  !!!Warning you may work with TTB services only in this event or later.

  Im use settimer() - so notify appear in miranda message loop
  after all onmodulesload calls.
}
  ME_TTB_MODULELOADED:PAnsiChar = 'TopToolBar/ModuleLoaded';

{
//=== SERVICES ===

  toptoolbar/addbutton service
  wparam = (TTBButton*)lpTTBButton
  lparam = 0
  returns: hTTBButton - handle of added button on success, -1 on failure.
}
  MS_TTB_ADDBUTTON:PAnsiChar = 'TopToolBar/AddButton';

{
  toptoolbar/removebutton service
  wparam = (HANDLE)hTTButton
  lparam = 0
  returns: 0 on success, -1 on failure.
}
  MS_TTB_REMOVEBUTTON:PAnsiChar = 'TopToolBar/RemoveButton';

{
  toptoolbar/setstate service
  wparam = (HANDLE)hTTButton
  lparam = (LPARAM) state
  returns: 0 on success, -1 on failure.
}
  TTBST_PUSHED   = 1;
  TTBST_RELEASED = 2;

  MS_TTB_SETBUTTONSTATE:PAnsiChar = 'TopToolBar/SetState';

{
  toptoolbar/getstate service
  wparam = (HANDLE)hTTButton
  lparam = 0
  returns: state on success, -1 on failure.
}
  MS_TTB_GETBUTTONSTATE:PAnsiChar = 'TopToolBar/GetState';

{
  toptoolbar/getoptions service
  (HIWORD)wparam = (HANDLE)hTTButton
  (LOWORD)wparam = TTBO_FLAG
  lparam = 0,or lparam=lpTTBButton if flag=TTBO_ALLDATA
  returns: value on success, -1 on failure.
}
  TTBO_FLAGS   = 0; // get/set all flags
  TTBO_POS     = 1; // position
  TTBO_WIDTH   = 2; // not impemented
  TTBO_HEIGHT  = 3; // not impemented
  TTBO_TIPNAME = 4; // tool tip name
  TTBO_ALLDATA = 5; // change all data via lparam=lpTTBButton

  MS_TTB_GETBUTTONOPTIONS:PAnsiChar = 'TopToolBar/GetOptions';

{
  toptoolbar/setoptions service
  (HIWORD)wparam = (HANDLE)hTTButton
  (LOWORD)wparam = TTBO_FLAG
  lparam = value
  returns: 1 on success, -1 on failure.
}
  MS_TTB_SETBUTTONOPTIONS:PAnsiChar = 'TopToolBar/SetOptions';

{$ENDIF}
